iconEuler Examples

Steuersatz in Deutschland

Berechnung der deutschen Einkommenssteuer, des Steuersatzes und des Grenzsteuersatzes. Zugrunde liegt die Steuerfunktion von 2010-2014.

Die Steuerfunktion ist ein quadratischer Spline, aus 5 Stücken zusammengesetzt. Für Verheiratete ist aufgrund des Ehegattensplittings die Steuerlast gleich dem Doppelten des Steuersatzes bei halbierten Einkommen. Dies ist in der folgenden Funktion berücksichtigt.

>function  map steuer (x:scalar, verheiratet:integer=0) ...
   if verheiratet then xs=x/2; f=2; else xs=x; f=1; endif
   if xs<8130 then return 0
   elseif xs<13470 then y=(xs-8130)/10000; return (933.7*y+1400)*y*f
   elseif xs<52881 then y=(xs-13470)/10000; return ((228.74*y+2397)*y+1014)*f
   elseif xs<=250730 then return (0.42*xs-8196)*f
   else return (0.45*xs-15718)*f
 endif
 endfunction

Beispiel

Wir rechnen eine Gehaltserhöhung für einen nicht verheirateten Facharbeiter mit 40000€ Jahresgehalt durch.

Zunächst definieren wir einige Ausgaberoutinen, die uns erlauben, die Ausgabe hübscher zu formatieren.

>function prefix eu (x) := cprint(x)+" €";
>function prefix pp (x) := print(x->%,2,unit=" %");

Nun also das Bruttogehalt, die Steuer und das Nettogehalt.

>E=40000; eu E, eu steuer(E), eu E-steuer(E)
   40 000.00 €
    8 983.21 €
   31 016.79 €

Der Steuersatz.

>pp steuer(E)/E
     22.46 %

Nun dasselbe nach der Gehaltserhöhung.

>Z=40000*2%; eu E+Z, eu steuer(E+Z), eu E+Z-steuer(E+Z)
   40 800.00 €
    9 273.53 €
   31 526.47 €
>pp steuer(E+Z)/(E+Z)
     22.73 %

Von den 800€ bleiben 510€ übrig.

>eu Z-(steuer(E+Z)-steuer(E))
      509.68 €

Das liegt am Grenzsteuersatz.

>pp diff("steuer",E)
     36.11 %

Die Progression

Der Plot zeigt den Anstieg der Steuer mit dem Einkommen, die Progression (konvexe Kurve), und die Auswirkungen des Ehegattensplittings.

>shrinkwindow(>smaller);  ...
 plot2d("steuer",0,125000); plot2d("steuer";1,add=1,color=12); ...
 labelbox(["ledig","verh."],colors=[black,blue],x=0.3); ...
 xlabel("ZvE"); ylabel("Steuer"):

Steuersatz in Deutschland

Im folgenden Plot wurden die Nahtstellen zwischen den Funktionen aufgenommen, aus denen die Steuerfunktion stückweise besteht.

>shrinkwindow(); plot2d("steuer",0,125000); ...
 x=[7664,12739,52151,250000]; y=steuer(x); ...
 plot2d(x,y,points=true,add=true); insimg();

Steuersatz in Deutschland

Der Steuersatz ist der Anteil der Steuer vom zu versteuernden Einkommen.

>function steuersatz (x,verheiratet=0) := steuer(x,verheiratet)/x

Der Steuersatz eines Verheirateten mit 30000 Euro Einkommen liegt bei 9.2%.

>steuersatz(30000,1)->" %"
9.2406371644 %

Der Folgende Plot vergleicht die Steuersätze zwischen Ledigen und Verheirateten.

>plot2d("steuersatz(x)*100",a=1,b=145000,c=0,d=100,title="Steuersatz"); ...
 plot2d("steuersatz(x,1)*100";1,add=1,color=12); ...
 labelbox(["ledig","verh."],colors=[black,blue]):

Steuersatz in Deutschland

Der Grenzsteuersatz gibt den prozentualen Abzug von Gehaltsänderungen an.

Zunächst ein Beispiel: Das Gehalt eines Verheirateten steigt von 30000 auf 31000 Euro. Es wird 25% des Anstiegs als Steuer einbehalten. Der Steuersatz beträgt allerdings nur 10%.

>(steuer(31000,1)-steuer(30000,1))/1000->" %"
24.7843144 %

Der Grenzsteuersatz wird hier durch numerisches Ableiten des Steuersatzes berechnet.

>function grenzsteuersatz (x,verheiratet=0) := diff("steuer",x;verheiratet)
>grenzsteuersatz(30000,1)->" %"
24.6699442118 %

Grenzsteuersatz

Wir fügen zum Plot die Grenzsteuersätze hinzu.

Die Grenzsteuersätze sind in Deutschland Streckenzüge mit Unstetigkeiten beim Grundeinkommen und bei 250'000 Euro Einkommen, wo ein Sprung stattfindet von 42% auf den Maximalsatz von 45%.

>plot2d("grenzsteuersatz(x)*100",>add,style="--"); ...
 plot2d("grenzsteuersatz(x,1)*100",>add,color=12,style="--"); ...
 labelbox(["Steuersatz","verh.","Grenzsteuersatz","verh."]; ...
   colors=[black,blue,black,blue],styles=["-","-","--","--"]); ...
 xlabel("ZvE"); ylabel("%"):

Steuersatz in Deutschland

Der Grenzsteuersatz ist die Steigung der Tangenten, der Steuersatz die Steigung der Geraden durch (0,0).

>plot2d("steuer",0,25000); ...
   x0=20000;  plot2d(x0,steuer(x0),points=1,add=true); ...
   plot2d("steuer(x0)+grenzsteuersatz(x0)*(x-x0)",color=4,add=true,style="--"); ...
   plot2d("steuer(x0)+steuersatz(x0)*(x-x0)",color=6,add=true,style="--"); ...
   label("Grenzsteuersatz",13500,900,color=4); ...
   label("Steuersatz",6500,900,color=6):

Steuersatz in Deutschland

Elastizität

Die Steuerelastizität bestimmt, um wieviel % sich die Steuerlast erhöht, wenn sich das Gehalt um 1% erhöht.

>function steuerelastizitaet (x) := grenzsteuersatz(x)*x/steuer(x); ...
 plot2d("steuerelastizitaet",10001,125000):

Steuersatz in Deutschland

Interessanter ist oft, wieviel von 1% Gehaltserhöhung mehr in der Tasche bleibt.

>plot2d("x*0.01-(steuer(x*1.01)-steuer(x))",0,125000,n=500); ...
 plot2d("x*0.01-(steuer(x*1.01,1)-steuer(x,1))",add=1,n=500,color=12); ...
 labelbox(["ledig","verh."],colors=[black,blue],x=0.3):

Steuersatz in Deutschland

Die Bierdeckelsteuer

Zum Vergleich rechnen wir die "Bierdeckelsteuer" durch.

Es wird angenommen, dass die Steuersätze 14%, 25%, 35%, 42%, 45% sind, und jeweils für Einkommen über 8000, 12500, 35000, 53000, 250000 Euro gelten sollen.

>function  map S(X) ...
 S=0;
 if X>=250000 then S=0.45*(X-250000); X=250000; endif;
 if X>=53000 then S=S+0.42*(X-53000); X=53000; endif;
 if X>=35000 then S=S+0.35*(X-35000); X=35000; endif;
 if X>=12500 then S=S+0.25*(X-12500); X=12500; endif;
 if X>=8000 then S=S+0.14*(X-8000); endif;
 return S;
 endfunction

Zum Vergleich die geltende Steuerlast in rot.

>plot2d("steuer",1,125000,color=2); ...
   plot2d("S",add=1,title="Zu zahlende Steuer");  ...
   insimg;

Steuersatz in Deutschland

Im folgenden Plot sieht man die Differenz zwischen den Steuermodellen in Form der "Entlastung".

>plot2d("steuer(x)-S(x)",1,125000,title="Entlastung"):

Steuersatz in Deutschland

Der Steuersatz steigt immer noch monoton. Zum Vergleich der alte Steuersatz in rot.

>function SS(X) := Smap(X)/X; ...
 plot2d("steuersatz(x)*100",1,125000,color=2); ...
 plot2d("SS(x)*100",add=1,title="Steuersatz"):

Steuersatz in Deutschland

Der Grenzsteuersatz ist aufgrund der Konstruktion natürlich in den Sprüngen unstetig.

>function dS(X) := diff("S",X); ...
 plot2d("grenzsteuersatz(x)*100",1,125000,color=2); ...
 plot2d("dS(x)*100",add=1,n=500,title="Grenzsteuersatz"):

Steuersatz in Deutschland

In der Elastizität entstehen Unstetigkeiten bei den Sprüngen.

>function SE(X) := dS(X)*X/S(X); ...
 plot2d("SE",11000,125000,n=500,title="Elastizität der Steuer"):

Steuersatz in Deutschland

Wieviel bleibt von 1% Gehaltserhöhung übrig?

>plot2d("(1-dS(x))*x/100",0,125000,n=500, ...
   title="Zugewinn bei 1% Gehaltswachstum"):

Steuersatz in Deutschland

Examples Homepage